﻿using System.Text;
using Microsoft.Win32;
using Mod管家.Util;

namespace Mod管家
{
    /// <summary>
    ///     注册窗口类，用于软件的注册流程。
    /// </summary>
    public partial class Register : Form
    {
        // CPU唯一标识符
        private static readonly string Cpuid = SafeAppTools.GetCpuId();

        /// <summary>
        ///     构造函数，初始化注册窗口。
        /// </summary>
        public Register()
        {
            InitializeComponent();
        }

        /// <summary>
        ///     窗口关闭事件，退出应用程序。
        /// </summary>
        /// <param name="sender">事件源</param>
        /// <param name="e">事件参数</param>
        private void Register_FormClosed(object sender, FormClosedEventArgs e)
        {
            Application.Exit();
        }

        /// <summary>
        ///     窗口加载事件，初始化请求码。
        /// </summary>
        /// <param name="sender">事件源</param>
        /// <param name="e">事件参数</param>
        private void Register_Load(object sender, EventArgs e)
        {
            // 构造请求码字符串并进行Base64编码
            string requestCode =
                $"cpuid:{Cpuid},requestTime:{DateTime.Now:yyyy-MM-dd HH:mm:ss},hash:HASH256";
            RequestCode.Text = Convert.ToBase64String(Encoding.UTF8.GetBytes(requestCode));
        }

        /// <summary>
        ///     验证激活码的有效性。
        /// </summary>
        /// <param name="jsKey">激活码</param>
        /// <returns>CPU标识符的哈希值，用于验证</returns>
        private static string VerifyCode(string jsKey)
        {
            string[] parts = jsKey.Split(',');
            string[] cpuHash = parts[0].Split(':');
            return cpuHash[1];
        }

        /// <summary>
        ///     激活按钮点击事件，执行激活操作。
        /// </summary>
        /// <param name="sender">事件源</param>
        /// <param name="e">事件参数</param>
        private void Activation_Click(object sender, EventArgs e)
        {
            // 检查激活码是否为空
            if (ActivationCode.Text == "")
            {
                MessageBox.Show("请输入激活码！", "Mod管家", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            try
            {
                // 计算CPU信息的SHA256哈希值
                string cpuInfo = SafeAppTools.ComputeSha256Hash(Cpuid);
                // 解码激活码字符串
                string activationCode = Encoding.UTF8.GetString(Convert.FromBase64String(ActivationCode.Text));

                // 验证激活码是否有效
                if (cpuInfo == VerifyCode(activationCode))
                {
                    MessageBox.Show("激活成功！", "Mod管家", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    // 将注册信息写入注册表
                    var key = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\BH6MOD\Mod管家\AppData");
                    key.SetValue("regInfo", cpuInfo);
                    key.Close();
                    // 打开主窗口并显示已激活状态
                    var main = new Form1();
                    main.Text = "Mod管家 - 已激活";
                    Close();
                    main.ShowDialog();
                }
                else
                {
                    // 激活码无效提示
                    MessageBox.Show("激活码无效！请检查您的激活码！或者联系作者！", "Mod管家", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    ActivationCode.Text = "";
                }
            }
            catch (Exception ex)
            {
                // 激活码格式错误提示
                MessageBox.Show("激活码非法！！请重新输入！！！", "Mod管家", MessageBoxButtons.OK, MessageBoxIcon.Error);
                // 可选：记录异常日志
                // LogException(ex);
                ActivationCode.Text = "";
            }
        }

        /// <summary>
        ///     帮助按钮点击事件，显示软件激活相关信息。
        /// </summary>
        /// <param name="sender">事件源</param>
        /// <param name="e">事件参数</param>
        private void help_Click(object sender, EventArgs e)
        {
            MessageBox.Show("作者：Marissa & Spirit魂\n邮箱：2252905453@qq.com\n作者QQ：2252905453\n\n" +
                            "请将请求码完整复制发送给作者，获取软件激活码！\n\n" +
                            "本软件禁止盗用！！", "Mod管家", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }

}